TCP μ°κ²° κ΄λ¦¬ λ° μμΌ μν λ¨Έμ μ λν μ’ ν© κ°μ΄λμ λλ€. κ° μν, μ ν, λ€νΈμν¬ νλ‘κ·Έλλ°μ μ€μ μλ―Έλ₯Ό μ€λͺ ν©λλ€.
TCP μ°κ²° κ΄λ¦¬: μμΌ μν λ¨Έμ μλ²½ ν΄λΆ
μ μ‘ μ μ΄ νλ‘ν μ½(TCP)μ μΈν°λ·μ λ§μ λΆλΆμ λ·λ°μΉ¨νλ©°, IP λ€νΈμν¬λ₯Ό ν΅ν΄ ν΅μ νλ νΈμ€νΈμμ μ€νλλ μ ν리μΌμ΄μ κ°μ μμ μ μ΄κ³ μμκ° μ§μ λκ³ μ€λ₯κ° κ²μ¬λ λ°μ΄ν° μ μ‘μ μ 곡ν©λλ€. TCP μμ μ±μ μ€μν μΈ‘λ©΄μ μ°κ²° μ§ν₯μ νΉμ±μ΄λ©°, μ΄λ μ μ μλ νλ‘μΈμ€λ₯Ό ν΅ν΄ κ΄λ¦¬λκ³ μμΌ μν λ¨Έμ μ λ°μλ©λλ€.
μ΄ λ¬Έμμμλ TCP μμΌ μν λ¨Έμ , λ€μν μν λ° μν κ° μ νμ μ΄ν΄νλ λ° λμμ΄ λλ μ’ ν© κ°μ΄λλ₯Ό μ 곡ν©λλ€. κ° μνμ μ€μμ±, μν λ³κ²½μ νΈλ¦¬κ±°νλ μ΄λ²€νΈ, λ€νΈμν¬ νλ‘κ·Έλλ° λ° λ¬Έμ ν΄κ²°μ λ―ΈμΉλ μν₯μ μ΄ν΄λ΄ λλ€. μ μΈκ³ κ°λ°μ λ° λ€νΈμν¬ κ΄λ¦¬μμ κ΄λ ¨λ μ€μ μμ λ₯Ό μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
TCPμ μ°κ²° μ§ν₯μ νΉμ± μ΄ν΄
μ°κ²° μλ UDP(User Datagram Protocol)μ λ¬λ¦¬ TCPλ λ°μ΄ν°κ° μ μ‘λκΈ° μ μ λ μλν¬μΈνΈ κ°μ μ°κ²°μ μ€μ ν©λλ€. μ΄ μ°κ²° μ€μ λ¨κ³μλ μμͺ½ λͺ¨λ λ°μ΄ν°λ₯Ό 보λ΄κ³ λ°μ μ€λΉκ° λμλμ§ νμΈνλ 3λ°©ν₯ νΈλμ °μ΄ν¬κ° ν¬ν¨λ©λλ€. μ°κ²° μ’ λ£λ νΉμ μμλ₯Ό λ°λ₯΄λ―λ‘ λͺ¨λ λ°μ΄ν°κ° μ¬λ°λ₯΄κ² μ μ‘λκ³ λ¦¬μμ€κ° μ μμ μΌλ‘ ν΄μ λ©λλ€. μμΌ μν λ¨Έμ μ μ΄λ¬ν μ°κ²° λ¨κ³λ₯Ό μκ°μ λ° κ°λ μ μΌλ‘ ννν κ²μ λλ€.
TCP μμΌ μν λ¨Έμ : μκ°μ κ°μ΄λ
TCP μμΌ μν λ¨Έμ μ μ²μμλ 볡μ‘ν΄ λ³΄μΌ μ μμ§λ§ κ°λ³ μνμ μν κ° μ νμΌλ‘ λΆν΄νλ©΄ λ μ½κ² κ΄λ¦¬ν μ μμ΅λλ€. μνλ μ΄κΈ° μ€μ λΆν° μ μμ μΈ μ’ λ£κΉμ§ TCP μ°κ²°μ λ€μν λ¨κ³λ₯Ό λνλ λλ€.
μΌλ°μ μΈ TCP μν
- CLOSED: μ°κ²°μ΄ μλ μ΄κΈ° μνμ λλ€. μμΌμ΄ μ¬μ© μ€μ΄ μλλ©° 리μμ€κ° ν λΉλμ§ μμμ΅λλ€.
- LISTEN: μλ²κ° λ€μ΄μ€λ μ°κ²° μμ²μ κΈ°λ€λ¦¬κ³ μμ΅λλ€. νΉμ ν¬νΈμμ μλμ μΌλ‘ μμ λκΈ°ν©λλ€. ν¬νΈ 80μμ μμ λκΈ°νλ μΉ μλ² λλ ν¬νΈ 25μμ μμ λκΈ°νλ μ΄λ©μΌ μλ²λ₯Ό μκ°ν΄ 보μμμ€.
- SYN_SENT: ν΄λΌμ΄μΈνΈκ° μ°κ²°μ μμνκΈ° μν΄ SYN(λκΈ°ν) ν¨ν·μ 보λκ³ SYN-ACK(λκΈ°ν-μλ΅) μλ΅μ κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- SYN_RECEIVED: μλ²κ° SYN ν¨ν·μ μμ νκ³ SYN-ACKλ₯Ό λ€μ 보λμ΅λλ€. μ΄μ νΈλμ °μ΄ν¬λ₯Ό μλ£νκΈ° μν΄ ν΄λΌμ΄μΈνΈλ‘λΆν° ACK(μΉμΈ)λ₯Ό κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- ESTABLISHED: μ°κ²°μ΄ μ±κ³΅μ μΌλ‘ μ€μ λμμΌλ©° ν΄λΌμ΄μΈνΈμ μλ² κ°μ λ°μ΄ν° μ μ‘μ΄ κ°λ₯ν©λλ€. μ¬κΈ°κ° μ€μ μ ν리μΌμ΄μ μμ€ ν΅μ μ΄ λ°μνλ μνμ λλ€.
- FIN_WAIT_1: μλν¬μΈνΈ(ν΄λΌμ΄μΈνΈ λλ μλ²)κ° μ°κ²° μ’ λ£λ₯Ό μμνκΈ° μν΄ FIN(μ’ λ£) ν¨ν·μ 보λκ³ λ€λ₯Έ μλν¬μΈνΈλ‘λΆν° ACKλ₯Ό κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- FIN_WAIT_2: μλν¬μΈνΈκ° FIN ν¨ν·μ λν ACKλ₯Ό μμ νκ³ λ€λ₯Έ μλν¬μΈνΈλ‘λΆν° FIN ν¨ν·μ κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- CLOSE_WAIT: μλν¬μΈνΈκ° λ€λ₯Έ μλν¬μΈνΈλ‘λΆν° FIN ν¨ν·μ μμ νμ¬ μλλ°©μ΄ μ°κ²°μ λ«μΌλ €κ³ ν¨μ λνλ λλ€. μλν¬μΈνΈλ μ°κ²° μΈ‘λ©΄μ λ«μ μ€λΉλ₯Ό νκ³ μμ΅λλ€. μΌλ°μ μΌλ‘ λ¨μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ€μ μ체 FIN ν¨ν·μ 보λ λλ€.
- LAST_ACK: μλν¬μΈνΈκ° μμ λ FINμ λν μλ΅μΌλ‘ FIN ν¨ν·μ 보λκ³ λ€λ₯Έ μλν¬μΈνΈλ‘λΆν° μ΅μ’ ACKλ₯Ό κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- CLOSING: λΉκ΅μ λλ¬Έ μνμ λλ€. λ μλν¬μΈνΈκ° κ±°μ λμμ FIN ν¨ν·μ λ³΄λΌ λ λ°μν©λλ€. μλν¬μΈνΈλ FIN ν¨ν·μ λν ACKλ₯Ό κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- TIME_WAIT: μλν¬μΈνΈκ° μ΅μ’ ACKλ₯Ό λ³΄λΈ ν TIME_WAIT μνλ‘ λ€μ΄κ°λλ€. μ΄ μνλ μμ μ μΈ μ°κ²° μ’ λ£λ₯Ό 보μ₯νλ λ° λ§€μ° μ€μν©λλ€. μ΄ λ΄μ©μ λμ€μ μμΈν μ€λͺ νκ² μ΅λλ€.
λ μΌλ°μ μΈ TCP μν(λ€νΈμν¬ λ¬Έμ ν΄κ²° μ€μ μμ£Ό κ΄μ°°λ¨)
- UNKNOWN: μμΌ μνλ₯Ό νμΈν μ μμ΅λλ€. μ΄λ λ€μν μ μμ€ μ€λ₯ λλ¬Έμ΄κ±°λ 컀λμ΄ νμ€ TCP μνλ‘ μ²λ¦¬λμ§ μλ μμΌ μνλ₯Ό λ³΄κ³ ν λ λ°μν μ μμ΅λλ€.
μν μ ν: TCP μ°κ²°μ νλ¦
TCP μμΌ μν λ¨Έμ μ SYN, ACK λλ FIN ν¨ν·μ 보λ΄κ±°λ λ°λ κ²κ³Ό κ°μ μ΄λ²€νΈμ λ°λΌ μμΌμ΄ ν μνμμ λ€λ₯Έ μνλ‘ μ νλλ λ°©μμ μ μν©λλ€. μ΄λ¬ν μ νμ μ΄ν΄νλ κ²μ TCP μ°κ²°μ μλͺ μ μ΄ν΄νλ λ° ν΅μ¬μ λλ€.
μ°κ²° μ€μ (3λ°©ν₯ νΈλμ °μ΄ν¬)
- ν΄λΌμ΄μΈνΈ: CLOSED -> SYN_SENT: ν΄λΌμ΄μΈνΈλ μλ²μ SYN ν¨ν·μ λ³΄λ΄ μ°κ²°μ μμν©λλ€.
- μλ²: CLOSED -> LISTEN: μλ²λ λ€μ΄μ€λ μ°κ²° μμ²μ κΈ°λ€λ¦¬κ³ μμ΅λλ€.
- μλ²: LISTEN -> SYN_RECEIVED: μλ²κ° SYN ν¨ν·μ μμ νκ³ SYN-ACK ν¨ν·μΌλ‘ μλ΅ν©λλ€.
- ν΄λΌμ΄μΈνΈ: SYN_SENT -> ESTABLISHED: ν΄λΌμ΄μΈνΈκ° SYN-ACK ν¨ν·μ μμ νκ³ μλ²μ ACK ν¨ν·μ 보λ λλ€.
- μλ²: SYN_RECEIVED -> ESTABLISHED: μλ²κ° ACK ν¨ν·μ μμ νκ³ μ°κ²°μ΄ μ€μ λ©λλ€.
μ: μΉ λΈλΌμ°μ (ν΄λΌμ΄μΈνΈ)κ° μΉ μλ²(μλ²)μ μ°κ²°λ©λλ€. λΈλΌμ°μ κ° μλ²μ ν¬νΈ 80μΌλ‘ SYN ν¨ν·μ 보λ λλ€. ν¬νΈ 80μμ μμ λκΈ°νλ μλ²κ° SYN-ACKλ‘ μλ΅ν©λλ€. κ·Έλ° λ€μ λΈλΌμ°μ κ° ACKλ₯Ό λ³΄λ΄ HTTP μ°κ²°μ μ€μ ν©λλ€.
λ°μ΄ν° μ μ‘
μ°κ²°μ΄ ESTABLISHED μνμ μμΌλ©΄ μλ°©ν₯μΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμ΅λλ€. TCP νλ‘ν μ½μ λ°μ΄ν°κ° μμ μ μΌλ‘ μ¬λ°λ₯Έ μμλ‘ μ μ‘λλλ‘ ν©λλ€.
μ°κ²° μ’ λ£(4λ°©ν₯ νΈλμ °μ΄ν¬)
μ°κ²° μ’ λ£λ ν΄λΌμ΄μΈνΈ λλ μλ²κ° FIN ν¨ν·μ λ³΄λ΄ μμν©λλ€.
- μλν¬μΈνΈ A(μ: ν΄λΌμ΄μΈνΈ): ESTABLISHED -> FIN_WAIT_1: μλν¬μΈνΈ Aλ μ°κ²°μ λ«κΈ°λ‘ κ²°μ νκ³ μλν¬μΈνΈ Bμ FIN ν¨ν·μ 보λ λλ€.
- μλν¬μΈνΈ B(μ: μλ²): ESTABLISHED -> CLOSE_WAIT: μλν¬μΈνΈ Bλ FIN ν¨ν·μ μμ νκ³ μλν¬μΈνΈ Aμ ACK ν¨ν·μ 보λ λλ€. κ·Έλ° λ€μ μλν¬μΈνΈ Bλ CLOSE_WAIT μνλ‘ μ νλμ΄ λ«κΈ° μμ²μ λ°μμ§λ§ λ¨μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν΄μΌ ν¨μ λνλ λλ€.
- μλν¬μΈνΈ A: FIN_WAIT_1 -> FIN_WAIT_2: μλν¬μΈνΈ Aλ FINμ λν ACKλ₯Ό μμ νκ³ FIN_WAIT_2λ‘ μ΄λνμ¬ μλν¬μΈνΈ Bλ‘λΆν° FINμ κΈ°λ€λ¦½λλ€.
- μλν¬μΈνΈ B: CLOSE_WAIT -> LAST_ACK: μλν¬μΈνΈ Bκ° λ°μ΄ν° μ²λ¦¬λ₯Ό λ§μΉλ©΄ μλν¬μΈνΈ Aμ FIN ν¨ν·μ 보λ λλ€.
- μλν¬μΈνΈ A: FIN_WAIT_2 -> TIME_WAIT: μλν¬μΈνΈ Aλ μλν¬μΈνΈ Bλ‘λΆν° FINμ μμ νκ³ ACKλ₯Ό 보λ λλ€. κ·Έλ° λ€μ TIME_WAITλ‘ μ νλ©λλ€.
- μλν¬μΈνΈ B: LAST_ACK -> CLOSED: μλν¬μΈνΈ Bλ ACKλ₯Ό μμ νκ³ μ°κ²°μ λ«μ CLOSED μνλ‘ λμκ°λλ€.
- μλν¬μΈνΈ A: TIME_WAIT -> CLOSED: μ§μ λ μ ν μκ°(2MSL - μ΅λ μΈκ·Έλ¨ΌνΈ μλͺ ) ν μλν¬μΈνΈ Aλ TIME_WAITμμ CLOSEDλ‘ μ νλ©λλ€.
μ: μΉ λΈλΌμ°μ κ° μΉ νμ΄μ§ λ‘λλ₯Ό λ§μΉλ©΄ μΉ μλ²μμ TCP μ°κ²° λ«κΈ°λ₯Ό μμν μ μμ΅λλ€. λΈλΌμ°μ κ° μλ²μ FIN ν¨ν·μ 보λ΄κ³ 4λ°©ν₯ νΈλμ °μ΄ν¬λ μ μμ μΈ μ’ λ£λ₯Ό 보μ₯ν©λλ€.
TIME_WAIT μνμ μ€μμ±
TIME_WAIT μνλ μ’ μ’ μ€ν΄λ₯Ό λ°μ§λ§ μμ μ μΈ TCP μ°κ²° μ’ λ£λ₯Ό 보μ₯νλ λ° μ€μν μν μ ν©λλ€. κ·Έ μ΄μ λ λ€μκ³Ό κ°μ΅λλ€.
- μ§μ°λ ν¨ν· λ°©μ§: μ΄μ μ°κ²°μ ν¨ν·μ΄ λ€νΈμν¬μμ μ§μ°λ μ μμ΅λλ€. TIME_WAIT μνλ μ΄λ¬ν μ§μ°λ ν¨ν·μ΄ λμΌν μμΌμ μ€μ λ νμ μ°κ²°μ λ°©ν΄νμ§ μλλ‘ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ μ°κ²°μ΄ μλμΉ μκ² μ€λλ μ’ λ£λ μ°κ²°μμ λ°μ΄ν°λ₯Ό μμ νμ¬ μμΈ‘ν μ μλ λμ λ° μ μ¬μ μΈ λ³΄μ μ·¨μ½μ±μ μ΄λν μ μμ΅λλ€.
- μλ μ’ λ£μμ μμ μ μΈ μ’ λ£: μ΄λ€ κ²½μ°μλ ν μλν¬μΈνΈκ° μλμ μΌλ‘ μ°κ²°μ λ«μ μ μμ΅λλ€(μ¦, μ΄κΈ° FINμ 보λ΄μ§ μμ). TIME_WAIT μνλ₯Ό ν΅ν΄ νμ± λ«κΈ°λ₯Ό μμνλ μλν¬μΈνΈλ μ΅μ’ ACKκ° μμ€λ κ²½μ° λ€μ μ μ‘νμ¬ μλ μ’ λ£μκ° μΉμΈμ μμ νκ³ μ°κ²°μ μμ μ μΌλ‘ μ’ λ£ν μ μλλ‘ ν©λλ€.
TIME_WAIT μνμ κΈ°κ°μ μΌλ°μ μΌλ‘ μ΅λ μΈκ·Έλ¨ΌνΈ μλͺ (2MSL)μ λ λ°°μ΄λ©°, μ΄λ ν¨ν·μ΄ λ€νΈμν¬μ μ‘΄μ¬ν μ μλ μ΅λ μκ°μ λλ€. μ΄λ κ² νλ©΄ μ΄μ μ°κ²°μμ μ§μ°λ ν¨ν·μ΄ λ§λ£λ μ μλ μΆ©λΆν μκ°μ΄ ν보λ©λλ€.
TIME_WAIT λ° μλ² νμ₯μ±
TIME_WAIT μνλ νΉν μλͺ μ΄ μ§§μ μ°κ²°μ λ§μ΄ μ²λ¦¬νλ λμ©λ μλ²μ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μλ²κ° λ§μ μμ μ°κ²°μ μ κ·Ήμ μΌλ‘ λ«μΌλ©΄ TIME_WAIT μνμ μμΌμ΄ λ§μ΄ μ겨 μ¬μ© κ°λ₯ν 리μμ€κ° μμ§λκ³ μ μ°κ²°μ΄ μ€μ λμ§ μμ μ μμ΅λλ€. μ΄λ₯Ό TIME_WAIT κ³ κ°μ΄λΌκ³ λ ν©λλ€.
TIME_WAIT κ³ κ°μ μννλ λ°λ λ€μκ³Ό κ°μ μ¬λ¬ κΈ°μ μ΄ μμ΅λλ€.
- SO_REUSEADDR μμΌ μ΅μ : μ΄ μ΅μ μ μ¬μ©νλ©΄ μμΌμ΄ TIME_WAIT μνμ λ€λ₯Έ μμΌμμ μ΄λ―Έ μ¬μ© μ€μΈ ν¬νΈμ λ°μΈλ©ν μ μμ΅λλ€. μ΄λ κ² νλ©΄ ν¬νΈ κ³ κ° λ¬Έμ λ₯Ό μννλ λ° λμμ΄ λ μ μμ΅λλ€. κ·Έλ¬λ μ¬λ°λ₯΄κ² ꡬννμ§ μμΌλ©΄ μ μ¬μ μΈ λ³΄μ μνμ΄ λ°μν μ μμΌλ―λ‘ μ΄ μ΅μ μ μ¬μ©ν λλ μ£Όμν΄μΌ ν©λλ€.
- TIME_WAIT κΈ°κ° λ¨μΆ: μΌλ°μ μΌλ‘ κΆμ₯λμ§λ μμ§λ§ μΌλΆ μ΄μ 체μ μμλ TIME_WAIT κΈ°κ°μ λ¨μΆν μ μμ΅λλ€. κ·Έλ¬λ μ μ¬μ μΈ μνμ μ μ€νκ² κ³ λ €ν νμλ§ μνν΄μΌ ν©λλ€.
- λ‘λ λ°Έλ°μ±: μ¬λ¬ μλ²μ νΈλν½μ λΆμ°νλ©΄ κ°λ³ μλ²μ λΆνλ₯Ό μ€μ΄κ³ TIME_WAIT κ³ κ°μ λ°©μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
- μ°κ²° νλ§: μ°κ²°μ μμ£Ό μ€μ νκ³ μ’ λ£νλ μ ν리μΌμ΄μ μ κ²½μ° μ°κ²° νλ§μ μ°κ²°μ λ§λ€κ³ μ κ±°νλ μ€λ²ν€λλ₯Ό μ€μ¬ TIME_WAIT μνλ‘ λ€μ΄κ°λ μμΌ μλ₯Ό μ΅μννλ λ° λμμ΄ λ μ μμ΅λλ€.
μμΌ μνλ₯Ό μ¬μ©νμ¬ TCP μ°κ²° λ¬Έμ ν΄κ²°
TCP μμΌ μν λ¨Έμ μ μ΄ν΄νλ κ²μ λ€νΈμν¬ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° λ§€μ° μ€μν©λλ€. ν΄λΌμ΄μΈνΈμ μλ² μΈ‘ λͺ¨λμμ μμΌμ μνλ₯Ό κ²μ¬νμ¬ μ°κ²° λ¬Έμ μ λν ν΅μ°°λ ₯μ μ»κ³ μ μ¬μ μΈ μμΈμ μλ³ν μ μμ΅λλ€.
μΌλ°μ μΈ λ¬Έμ λ° μ¦μ
- μ°κ²° κ±°λΆ: μ΄λ μΌλ°μ μΌλ‘ μλ²κ° μμ²λ ν¬νΈμμ μμ λκΈ°νμ§ μκ±°λ λ°©νλ²½μ΄ μ°κ²°μ μ°¨λ¨νκ³ μμμ λνλ λλ€. ν΄λΌμ΄μΈνΈλ μ°κ²°μ΄ κ±°λΆλμμμ λνλ΄λ μ€λ₯ λ©μμ§λ₯Ό λ³Ό μ μμ΅λλ€. ν΄λΌμ΄μΈνΈ μΈ‘μ μμΌ μνλ μ²μμ SYN_SENTμΌ μ μμ§λ§ μκ° μ΄κ³Ό ν κ²°κ΅ CLOSEDλ‘ μ νλ©λλ€.
- μ°κ²° μκ° μ΄κ³Ό: μ΄λ μΌλ°μ μΌλ‘ ν΄λΌμ΄μΈνΈκ° μλ²μ μ°κ²°ν μ μμμ μλ―Έν©λλ€. μ΄λ λ€νΈμν¬ μ°κ²° λ¬Έμ , λ°©νλ²½ μ ν λλ μλ²κ° λ€μ΄λ λλ¬ΈμΌ μ μμ΅λλ€. ν΄λΌμ΄μΈνΈμ μμΌμ μκ° μ΄κ³ΌλκΈ° μ μ SYN_SENT μνλ‘ μ₯μκ° μ μ§λ©λλ€.
- λμ TIME_WAIT μ: μμμ μΈκΈνλ―μ΄ TIME_WAIT μνμ μμΌ μκ° λ§μΌλ©΄ μλ²μ μ μ¬μ μΈ νμ₯μ± λ¬Έμ κ° μμμ λνλΌ μ μμ΅λλ€. λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νλ©΄ κ° μνμ μμΌ μλ₯Ό μΆμ νλ λ° λμμ΄ λ μ μμ΅λλ€.
- CLOSE_WAITμ λ©μΆ€: μλ²κ° CLOSE_WAIT μνμ λ©μΆ° μμΌλ©΄ ν΄λΌμ΄μΈνΈλ‘λΆν° FIN ν¨ν·μ μμ νμ§λ§ μ°κ²° μΈ‘λ©΄μ μμ§ λ«μ§ μμμμ μλ―Έν©λλ€. μ΄λ μλ² μ ν리μΌμ΄μ μ μ°κ²° μ’ λ£λ₯Ό μ λλ‘ μ²λ¦¬νμ§ λͺ»νκ² νλ λ²κ·Έκ° μμμ λνλΌ μ μμ΅λλ€.
- μκΈ°μΉ μμ RST ν¨ν·: RST(μ¬μ€μ ) ν¨ν·μ TCP μ°κ²°μ κ°μκΈ° μ’ λ£ν©λλ€. μ΄λ¬ν ν¨ν·μ μ ν리μΌμ΄μ μΆ©λ, λ°©νλ²½ ν¨ν· μμ λλ μνμ€ λ²νΈ λΆμΌμΉμ κ°μ λ€μν λ¬Έμ λ₯Ό λνλΌ μ μμ΅λλ€.
μμΌ μν λͺ¨λν°λ§ λꡬ
TCP μμΌ μνλ₯Ό λͺ¨λν°λ§νλ λ° μ¬μ©ν μ μλ μ¬λ¬ λκ΅¬κ° μμ΅λλ€.
- netstat: λλΆλΆμ μ΄μ 체μ (Linux, Windows, macOS)μμ μ¬μ©ν μ μλ λͺ λ Ήμ€ μ νΈλ¦¬ν°λ‘, λ€νΈμν¬ μ°κ²°, λΌμ°ν ν μ΄λΈ, μΈν°νμ΄μ€ ν΅κ³ λ±μ νμν©λλ€. νμ± TCP μ°κ²°κ³Ό ν΄λΉ μνλ₯Ό λͺ¨λ λμ΄νλ λ° μ¬μ©ν μ μμ΅λλ€. μ: Linux/macOSμμ `netstat -an | grep tcp` λλ Windowsμμ `netstat -ano | findstr TCP`. Windowsμ `-o` μ΅μ μ κ° μ°κ²°κ³Ό μ°κ²°λ νλ‘μΈμ€ ID(PID)λ₯Ό νμν©λλ€.
- ss(μμΌ ν΅κ³): netstatλ³΄λ€ μμΌμ λν λ μμΈν μ 보λ₯Ό μ 곡νλ Linuxμ μλ‘μ΄ λͺ λ Ήμ€ μ νΈλ¦¬ν°μ λλ€. λ λΉ λ₯΄κ³ ν¨μ¨μ μΈ κ²½μ°κ° λ§μ΅λλ€. μ: `ss -tan`(TCP, λͺ¨λ μ£Όμ, μ«μ μ£Όμ).
- tcpdump/Wireshark: λ€νΈμν¬ νΈλν½μ μμΈν λΆμν μ μλ ν¨ν· μΊ‘μ² λꡬμ λλ€. μ΄λ₯Ό μ¬μ©νμ¬ TCP ν¨ν·(SYN, ACK, FIN, RST) μνμ€λ₯Ό κ²μ¬νκ³ μν μ νμ μ΄ν΄ν μ μμ΅λλ€.
- νλ‘μΈμ€ νμκΈ°(Windows): μ€ν μ€μΈ νλ‘μΈμ€ λ° λ€νΈμν¬ μ°κ²°μ ν¬ν¨ν κ΄λ ¨ 리μμ€λ₯Ό κ²μ¬ν μ μλ κ°λ ₯ν λꡬμ λλ€.
- λ€νΈμν¬ λͺ¨λν°λ§ λꡬ: λ€μν μμ© λ° μ€ν μμ€ λ€νΈμν¬ λͺ¨λν°λ§ λꡬλ λ€νΈμν¬ νΈλν½ λ° μμΌ μνμ λν μ€μκ° κ°μμ±μ μ 곡ν©λλ€. μλ‘λ SolarWinds Network Performance Monitor, PRTG Network Monitor λ° Zabbixκ° μμ΅λλ€.
λ€νΈμν¬ νλ‘κ·Έλλ°μ λν μ€μ μ μλ―Έ
TCP μμΌ μν λ¨Έμ μ μ΄ν΄νλ κ²μ λ€νΈμν¬ νλ‘κ·Έλλ¨Έμκ² λ§€μ° μ€μν©λλ€. λ€μμ λͺ κ°μ§ μ€μ μ μλ―Έμ λλ€.
- μ μ ν μ€λ₯ μ²λ¦¬: λ€νΈμν¬ μ ν리μΌμ΄μ μ μ°κ²° μ€μ , λ°μ΄ν° μ μ‘ λ° μ°κ²° μ’ λ£μ κ΄λ ¨λ μ μ¬μ μΈ μ€λ₯λ₯Ό μ μμ μΌλ‘ μ²λ¦¬ν΄μΌ ν©λλ€. μ¬κΈ°μλ μ°κ²° μκ° μ΄κ³Ό, μ°κ²° μ¬μ€μ λ° κΈ°ν μκΈ°μΉ μμ μ΄λ²€νΈ μ²λ¦¬κ° ν¬ν¨λ©λλ€.
- μ μμ μΈ μ’ λ£: μ ν리μΌμ΄μ μ FIN ν¨ν·μ λ³΄λ΄ μ°κ²°μ μ λλ‘ μ’ λ£νλ μ μμ μΈ μ’ λ£ μ μ°¨λ₯Ό ꡬνν΄μΌ ν©λλ€. μ΄λ κ² νλ©΄ κ°μμ€λ¬μ΄ μ°κ²° μ’ λ£μ μ μ¬μ μΈ λ°μ΄ν° μμ€μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
- 리μμ€ κ΄λ¦¬: λ€νΈμν¬ μ ν리μΌμ΄μ μ 리μμ€ κ³ κ°μ λ°©μ§νκΈ° μν΄ λ¦¬μμ€(μ: μμΌ, νμΌ μ€λͺ μ)λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν΄μΌ ν©λλ€. μ¬κΈ°μλ λ μ΄μ νμνμ§ μμ κ²½μ° μμΌμ λ«κ³ TIME_WAIT μνλ₯Ό μ μ νκ² μ²λ¦¬νλ κ²μ΄ ν¬ν¨λ©λλ€.
- 보μ κ³ λ € μ¬ν: SYN νλ¬λ λ° TCP νμ΄μ¬νΉκ³Ό κ°μ TCP μ°κ²°κ³Ό κ΄λ ¨λ μ μ¬μ μΈ λ³΄μ μ·¨μ½μ±μ μ μνμμμ€. μ΄λ¬ν μνμΌλ‘λΆν° 보νΈνκΈ° μν΄ μ μ ν 보μ μ‘°μΉλ₯Ό ꡬννμμμ€.
- μ¬λ°λ₯Έ μμΌ μ΅μ μ ν: SO_REUSEADDR, TCP_NODELAY λ° TCP_KEEPALIVEμ κ°μ μμΌ μ΅μ μ μ΄ν΄νλ κ²μ λ€νΈμν¬ μ±λ₯ λ° μμ μ±μ μ΅μ ννλ λ° μ€μν©λλ€.
μ€μ μμ λ° μλ리μ€
TCP μμΌ μν λ¨Έμ μ μ΄ν΄νλ κ²μ μ€μμ±μ μ€λͺ νκΈ° μν΄ λͺ κ°μ§ μ€μ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄κ² μ΅λλ€.
- κ³Όλν λΆνκ° κ±Έλ¦° μΉ μλ²: νΈλν½ κΈμ¦μ΄ λ°μνλ μΉ μλ²μμ TIME_WAIT κ³ κ°μ΄ λ°μνμ¬ μ°κ²° μ€ν¨λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μμΌ μνλ₯Ό λͺ¨λν°λ§νλ©΄ μ΄ λ¬Έμ λ₯Ό μλ³νλ λ° λμμ΄ λ μ μμΌλ©° μ μ ν μν μ λ΅(μ: SO_REUSEADDR, λ‘λ λ°Έλ°μ±)μ ꡬνν μ μμ΅λλ€.
- λ°μ΄ν°λ² μ΄μ€ μ°κ²° λ¬Έμ : μ ν리μΌμ΄μ μ΄ λ°μ΄ν°λ² μ΄μ€ μλ²μ μ°κ²°νμ§ λͺ»νλ κ²μ λ°©νλ²½ μ ν, λ€νΈμν¬ μ°κ²° λ¬Έμ λλ λ°μ΄ν°λ² μ΄μ€ μλ²κ° λ€μ΄λ λλ¬ΈμΌ μ μμ΅λλ€. μ ν리μΌμ΄μ κ³Ό λ°μ΄ν°λ² μ΄μ€ μλ² λͺ¨λμμ μμΌ μνλ₯Ό κ²μ¬νλ©΄ κ·Όλ³Έ μμΈμ μ νν νμ νλ λ° λμμ΄ λ μ μμ΅λλ€.
- νμΌ μ μ‘ μ€ν¨: νμΌ μ μ‘μ΄ μ€κ°μ μ€ν¨νλ κ²μ μ°κ²° μ¬μ€μ λλ λ€νΈμν¬ μ€λ¨μΌλ‘ μΈν΄ λ°μν μ μμ΅λλ€. TCP ν¨ν· λ° μμΌ μνλ₯Ό λΆμνλ©΄ λ¬Έμ κ° λ€νΈμν¬μ κ΄λ ¨μ΄ μλμ§ μλλ©΄ μ ν리μΌμ΄μ κ³Ό κ΄λ ¨μ΄ μλμ§ νμΈν μ μμ΅λλ€.
- λΆμ° μμ€ν : λ§μ΄ν¬λ‘μλΉμ€κ° μλ λΆμ° μμ€ν μμ TCP μ°κ²° κ΄λ¦¬λ₯Ό μ΄ν΄νλ κ²μ μλΉμ€ κ° ν΅μ μ λ§€μ° μ€μν©λλ€. μ μ ν μ°κ²° μ²λ¦¬ λ° μ€λ₯ μ²λ¦¬λ μμ€ν μ μμ μ±κ³Ό κ°μ©μ±μ 보μ₯νλ λ° νμμ μ λλ€. μλ₯Ό λ€μ΄ λ€μ΄μ€νΈλ¦Ό μ’ μμ±μ μ¬μ©ν μ μλ€λ κ²μ λ°κ²¬ν μλΉμ€λ TCP μ°κ²° μκ° μ΄κ³Ό λ° λ«κΈ°λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νμ§ μμΌλ©΄ λκ°λ ν¬νΈλ₯Ό λΉ λ₯΄κ² μλͺ¨ν μ μμ΅λλ€.
μ μμ κ³ λ € μ¬ν
κΈλ‘λ² μ»¨ν μ€νΈμμ TCP μ°κ²°λ‘ μμ ν λλ λ€μ μ¬νμ κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
- λ€νΈμν¬ λκΈ° μκ°: λ€νΈμν¬ λκΈ° μκ°μ ν΄λΌμ΄μΈνΈμ μλ² κ°μ μ§λ¦¬μ 거리μ λ°λΌ ν¬κ² λ¬λΌμ§ μ μμ΅λλ€. λμ λκΈ° μκ°μ νΉν λΉλ²ν μ볡 ν΅μ μ΄ νμν μ ν리μΌμ΄μ μ κ²½μ° TCP μ°κ²° μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€.
- λ°©νλ²½ μ ν: κ΅κ° λ° μ‘°μ§λ§λ€ λ°©νλ²½ μ μ± μ΄ λ€λ₯Ό μ μμ΅λλ€. μ ν리μΌμ΄μ μ΄ λ°©νλ²½μ ν΅ν΄ TCP μ°κ²°μ μ€μ ν μ μλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€.
- λ€νΈμν¬ μ 체: λ€νΈμν¬ μ 체λ TCP μ°κ²° μ±λ₯μλ μν₯μ μ€ μ μμ΅λλ€. μ 체 μ μ΄ λ©μ»€λμ¦(μ: TCP μ 체 μ μ΄ μκ³ λ¦¬μ¦)μ ꡬννλ©΄ μ΄λ¬ν λ¬Έμ λ₯Ό μννλ λ° λμμ΄ λ μ μμ΅λλ€.
- κ΅μ ν: μ ν리μΌμ΄μ μ΄ μ¬λ¬ μΈμ΄λ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κ²½μ° TCP μ°κ²°μ΄ μ μ ν λ¬Έμ μΈμ½λ©(μ: UTF-8)μ μ§μνλλ‘ κ΅¬μ±λμλμ§ νμΈνλ κ²μ΄ μ€μν©λλ€.
- κ·μ λ° μ€μ: κ΅κ°λ³ λ°μ΄ν° μ μ‘ λ° λ³΄μκ³Ό κ΄λ ¨λ κ΄λ ¨ κ·μ λ° μ€μ μꡬ μ¬νμ μμ§νμμμ€.
κ²°λ‘
TCP μμΌ μν λ¨Έμ μ λ€νΈμνΉμ κΈ°λ³Έ κ°λ μ λλ€. μν λ¨Έμ μ μν, μ ν λ° μλ―Έμ λν μ² μ ν μ΄ν΄λ λ€νΈμν¬ νλ‘κ·Έλλ¨Έ, μμ€ν κ΄λ¦¬μ λ° λ€νΈμν¬ μ ν리μΌμ΄μ κ°λ° λλ κ΄λ¦¬μ κ΄λ ¨λ λͺ¨λ μ¬λμκ² νμμ μ λλ€. μ΄ μ§μμ νμ©νλ©΄ λ³΄λ€ μμ μ μ΄κ³ ν¨μ¨μ μ΄λ©° μμ ν λ€νΈμν¬ μ루μ μ ꡬμΆνκ³ λ€νΈμν¬ κ΄λ ¨ λ¬Έμ λ₯Ό ν¨κ³Όμ μΌλ‘ ν΄κ²°ν μ μμ΅λλ€.
μ΄κΈ° νΈλμ °μ΄ν¬μμ μ μμ μΈ μ’ λ£μ μ΄λ₯΄κΈ°κΉμ§ TCP μν λ¨Έμ μ TCP μ°κ²°μ λͺ¨λ μΈ‘λ©΄μ μ μ΄ν©λλ€. κ° μνμ μν κ° μ νμ μ΄ν΄ν¨μΌλ‘μ¨ κ°λ°μμ λ€νΈμν¬ κ΄λ¦¬μλ λͺ¨λ λ€νΈμν¬ μ±λ₯μ μ΅μ ννκ³ μ°κ²° λ¬Έμ λ₯Ό ν΄κ²°νλ©° κΈλ‘λ² μνΈ μ°κ²°λ μΈμμμ λ²μ±ν μ μλ νλ ₯μ μ΄κ³ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆν μ μλ κΆνμ μ»μ΅λλ€.
μΆκ° νμ΅
- RFC 793: μ μ‘ μ μ΄ νλ‘ν μ½μ λν μλ³Έ μ¬μμ λλ€.
- W. Richard Stevensμ TCP/IP Illustrated, Volume 1: TCP/IP νλ‘ν μ½ μ€μνΈμ λν κ³ μ μ μ΄κ³ ν¬κ΄μ μΈ κ°μ΄λμ λλ€.
- μ¨λΌμΈ μ€λͺ μ: μμΌ νλ‘κ·Έλλ° λ° TCP μ°κ²° κ΄λ¦¬μ λν μ 보λ μ΄μ 체μ λλ νλ‘κ·Έλλ° μΈμ΄μ λν μ€λͺ μλ₯Ό μ°Έμ‘°νμμμ€.